### Lab1-1 ### # Tello 原廠官網 https://www.ryzerobotics.com/zh-tw/tello # SDK PDF 文件 https://reurl.cc/Ry7ONx ### Lab1-2 ### # 安裝 tello-python 模組 >>> pip install tello-python # tello-python 模組網址 https://pypi.org/project/tello-python ### Lab1-3 (1-1-tello-python.py) ### # 使用 tello-python 模組,連線 Tello 並設定為 SDK 的 command 模式 import tello drone = tello.Tello() ### Lab1-4 ### >>> drone.command() # 發送 command,設定 Tello 為 SDK 模式 (預設 drone = tello.Tello() 已設定過了) >>> drone.takeoff() # 自動起飛 >>> drone.forward(100) # 向前飛 x 釐米 (x = 20 ~ 500 cm) >>> drone.cw(90) # 順時針旋轉 x 度 (x = 1 ~ 360 cm) >>> drone.flip('r') # 朝左 ('l')、右 ('r')、前 ('f')、後 ('b') 方向翻滾 >>> drone.streamon() # 開啟視頻串流 >>> drone.streamoff() # 關閉視頻串流 >>> drone.land() # 自動降落 ### Lab1-5 (1-2-tello_takeoff&land.py) ### import tello # 匯入 tello-python 模組 from time import sleep # 匯入暫停時間的函式 sleep drone = tello.Tello() # 建立 tello.Tello() 類別的物件 drone drone.streamon() # 啟動攝影機 drone.takeoff() # 起飛 sleep(5) # 暫停 5 秒 drone.streamoff() # 關閉攝影機 drone.land() # 降落 ### Lab1-5 (1-3-tello_forward&back.py) ### import tello from time import sleep drone = tello.Tello() drone.streamon() drone.takeoff() sleep(5) drone.forward(50) # 往前飛 50 cm sleep(1) drone.back(50) # 往後飛 50 cm sleep(1) drone.streamoff() drone.land() ### Lab1-6 (1-4-tello_square.py) ### import tello from time import sleep drone = tello.Tello() drone.streamon() drone.takeoff() sleep(5) drone.forward(30) sleep(1) drone.right(30) # 往右飛 30 cm sleep(1) drone.back(30) sleep(1) drone.left(30) # 往左飛 30 cm sleep(1) drone.streamoff() drone.land() ### Lab1-7 (1-5-tello_look4corner.py) ### import tello from time import sleep drone = tello.Tello() drone.streamon() drone.takeoff() sleep(5) for i in range(4): # 使用 for 迴圈,規則的飛 4 種方向 drone.forward(50) sleep(2) drone.cw(90) sleep(2) drone.streamoff() drone.land() ### Lab1-8 ### # 安裝 DJITelloPy 模組 >>> pip install djitellopy ### Lab1-9 (1-6-djitello_easyFly.py) ### from djitellopy import Tello # 匯入 djitellopy 模組的 Tello 類別 from time import sleep drone = Tello() # 建立 Tello() 類別的物件 drone drone.connect() # 連接無人機 drone.takeoff() # 起飛 sleep(2) drone.move_left(100) # 往左飛 100 cm sleep(2) drone.rotate_counter_clockwise(90) # 逆時針旋轉 x 度 sleep(2) drone.move_forward(100) # 往前飛 100 cm sleep(2) drone.land() # 降落 ### Lab1-10 (1-7-djitello_easyFly&stream.py) ### import threading # 匯入多執行緒的 threading 模組 from djitellopy import Tello import cv2 # 匯入 opencv 模組 from time import sleep drone = Tello() drone.connect() drone.streamon() # 啟動攝影機 # 攝影機即時影像 def stream(): ESC = 27 while True: frame = drone.get_frame_read().frame # 讀取攝影機的影像 bgr_frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) # 將 RGB 影像轉成 BGR 影像 cv2.imshow('Drone Frame', bgr_frame) # 顯示影像 if cv2.waitKey(1) == ESC: # 中斷事件 drone.streamoff() # 關閉攝影機 cv2.destroyAllWindows() # 關閉影像視窗 break # 離開迴圈 # 無人機控制 def drone_control(): drone.takeoff() sleep(2) drone.move_left(100) sleep(2) drone.rotate_counter_clockwise(90) sleep(2) drone.move_forward(100) sleep(2) new_stream = threading.Thread(target = stream) # 建立攝影機處理的執行緒 new_drone_control = threading.Thread(target = drone_control) # 建立無人機控制的執行緒 new_stream.start() # 啟動執行緒 new_drone_control.start()